package com.zjsru.plan2024.oneday;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 2848. 与车相交的点
 * @Author: cookLee
 * @Date: 2024-09-20
 */
public class NumberOfPoints {

    /**
     * 给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i，nums[i] = [starti, endi] ，其中 starti 是第 i 辆车的起点，endi 是第 i 辆车的终点。
     * \
     * 输入：nums = [[3,6],[1,5],[4,7]]
     * 输出：7
     * 解释：从 1 到 7 的所有点都至少与一辆车相交，因此答案为 7 。
     * \
     * 输入：nums = [[1,3],[5,8]]
     * 输出：7
     * 解释：1、2、3、5、6、7、8 共计 7 个点满足至少与一辆车相交，因此答案为 7 。
     * \
     * @param args
     */
    public static void main(String[] args) {
        NumberOfPoints numberOfPoints = new NumberOfPoints();
        List<List<Integer>> nums = new ArrayList<>();
        nums.add(Arrays.asList(3,6));
        nums.add(Arrays.asList(1,5));
        nums.add(Arrays.asList(4,7));
        System.out.println(numberOfPoints.numberOfPoints(nums));
    }

    /**
     * 模拟
     * @param nums
     * @return int
     */
    public int numberOfPoints(List<List<Integer>> nums) {
        //设置最大上限
        int max = 0;
        for (List<Integer> num : nums) {
            max = Math.max(max, num.get(1));
        }
        //获取重合的数组部分
        int[] overlap = new int[max + 1];
        for (List<Integer> num : nums) {
            for (int i = num.get(0); i <= num.get(1); i++) {
                overlap[i]++;
            }
        }
        int ans = 0;
        for (int count : overlap) {
            if (count > 0) {
                ans++;
            }
        }
        return ans;
    }

}
